package com.wjl.springcloudalibaba.sentinel.gatewaysentinel.fallback;

import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpResponse;

import java.util.Arrays;

/**
 * @author wjl
 */
public class HelloFallback {
    /**
     * 注意：这里fallback方法返回值必须和原方法返回值保持一致，否则无法生效。<br />
     * 尝试过此处定义为Object，发现无法生效。修改为String后正常。<br />
     * 这样想也对，因为如果返回的不是String类型的数据，那么在后面进行类型转换时也会报错的。<br />
     * <p>
     * 当请求处理异常时，回调此方法。
     */
    public static String helloFallback(Throwable e) {
        e.printStackTrace();
        return "it`s helloFallback";
    }

    public static ClientHttpResponse echoFallback(HttpRequest request,
                                                  byte[] body,
                                                  ClientHttpRequestExecution clientHttpRequestExecution,
                                                  BlockException e) {
        e.printStackTrace();
        return new SentinelClientHttpResponse("it`s helloFallback for " + request.getURI() + Arrays.toString(body));
    }
}
